// 题1：下面打印什么结果
// 强制记忆：在自执行的具名函数中，修改函数引用无效
var b = 10;
(function b() {
    b = 20;
    console.log(b)   // [Function b]
})();


//------------------------------------------------------------------------------------------------------------
// 题2：简单改造下面的代码，使之分别打印10 和 20
var b = 10;
(function b() {
    b = 20;
    console.log(b);
})();


    /*
        目标1：打印10
    */
    var b = 10;
    (function b() {
        b = 20;
        console.log('target1', window.b);  // 通过window调用全局作用域下的b
    })();


    /*
        目标2：打印20
    */
        var b = 10;
        (function b() {
            var b = 20;
            console.log('target2', b);  // var重新声明变量
        })();

//------------------------------------------------------------------------------------------------------------
// 题3：考察作用域
var a = 10;

(function () {
    // 变量提升，相当于这里就 有了 var a;
    console.log(a);   // undefined   : 因为在函数作用域里面声明了var a = 20; var 进行了变量提升
    a = 5;
    console.log(window.a);  // 10
    var a = 20; 
    console.log(a);  // 20
})();